在上集中,我們學會了如何安裝、設定 Supabase CLI 以及基本指令的使用。這一集將用最簡單的方式示範如何本地建立資料表、同步到雲端,以及進行資料填充。
當我們在本地建立或修改資料表時,會產生對應的 SQL 遷移檔案。這些檔案可以版本化管理,確保團隊協作時的一致性。完成本地測試後,可以將變更推送到雲端,並選擇性地填充測試資料。
啟動本地環境:
supabase migration new create_posts_table
這會在 supabase/migrations/
目錄建立一個新的 SQL 檔案。
編輯剛建立的遷移檔案:
主要會建立一個 posts
資料表,包含貼文的標題、內容、作者 ID 等欄位。
新增時的作者 ID 會參考 Supabase Auth 的用戶 ID,並啟用 Row Level Security 來控制存取權限。
大量新增時,作者 ID 可以為 NULL,表示未指定作者。
-- 建立貼文資料表
CREATE TABLE posts (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
title TEXT NOT NULL,
content TEXT,
author_id UUID REFERENCES auth.users(id) ON DELETE CASCADE,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
-- 啟用 Row Level Security
ALTER TABLE posts ENABLE ROW LEVEL SECURITY;
-- 建立基本政策
CREATE POLICY "Anyone can view published posts" ON posts
FOR SELECT USING (true);
CREATE POLICY "Users can create their own posts" ON posts
FOR INSERT WITH CHECK (auth.uid() = author_id OR author_id IS NULL);
CREATE POLICY "Users can update their own posts" ON posts
FOR UPDATE USING (auth.uid() = author_id OR author_id IS NULL);
# 套用新的遷移(不重置整個資料庫)
supabase migration up
開啟 Supabase Studio 查看:
http://localhost:54323
posts
資料表已建立# 查看遷移狀態
supabase migration list
建立 supabase/seed.sql
檔案來插入測試資料:
-- supabase/seed.sql
-- 插入測試貼文資料
-- 注意:這裡使用固定的 UUID 作為示範,實際使用時應該是真實的用戶 ID或使用 Null 來表示未指定作者。
INSERT INTO posts (title, content, author_id) VALUES
('我的第一篇貼文', '這是我在這個平台上的第一篇貼文,很高興認識大家!', '550e8400-e29b-41d4-a716-446655440000'),
('學習 Supabase 心得', 'Supabase 真的很好用,特別是 Row Level Security 的功能讓我印象深刻。', '550e8400-e29b-41d4-a716-446655440001'),
('今天的天氣真好', '陽光明媚的一天,適合出去走走。', '550e8400-e29b-41d4-a716-446655440000');
# 重置資料庫並執行種子資料
supabase db reset --with-seed
INSERT INTO posts (title, content, author_id) VALUES
('我的第一篇貼文', '這是我在這個平台上的第一篇貼文,很高興認識大家!', NULL),
('學習 Supabase 心得', 'Supabase 真的很好用,特別是 Row Level Security 的功能讓我印象深刻。', NULL),
('今天的天氣真好', '陽光明媚的一天,適合出去走走。', NULL);
連接雲端專案
# 連接到雲端專案
supabase link --project-ref YOUR_PROJECT_ID
同步到雲端
# 推送本地資料庫結構到雲端
supabase db push
# 推送並執行種子資料
supabase db push --include-seed
以上流程可以:
... to be continued
有任何想討論歡迎留言,或需要指正的地方請鞭大力一點,歡迎訂閱、按讚加分享,分享給想要提升開發效率的朋友